Home | History | Annotate | Download | only in include
      1 /**************************************************************************\
      2 *
      3 * Copyright (c) 1998-2000, Microsoft Corp.  All Rights Reserved.
      4 *
      5 * Module Name:
      6 *
      7 *   GdiplusColor.h
      8 *
      9 * Abstract:
     10 *
     11 *   Represents a GDI+ color.
     12 *
     13 \**************************************************************************/
     14 
     15 #ifndef _GDIPLUSCOLOR_H
     16 #define _GDIPLUSCOLOR_H
     17 
     18 //----------------------------------------------------------------------------
     19 // Color mode
     20 //----------------------------------------------------------------------------
     21 
     22 enum ColorMode
     23 {
     24     ColorModeARGB32 = 0,
     25     ColorModeARGB64 = 1
     26 };
     27 
     28 //----------------------------------------------------------------------------
     29 // Color Channel flags
     30 //----------------------------------------------------------------------------
     31 
     32 enum ColorChannelFlags
     33 {
     34     ColorChannelFlagsC = 0,
     35     ColorChannelFlagsM,
     36     ColorChannelFlagsY,
     37     ColorChannelFlagsK,
     38     ColorChannelFlagsLast
     39 };
     40 
     41 //----------------------------------------------------------------------------
     42 // Color
     43 //----------------------------------------------------------------------------
     44 
     45 class Color
     46 {
     47 public:
     48 
     49     Color()
     50     {
     51         Argb = (ARGB)Color::Black;
     52     }
     53 
     54     // Construct an opaque Color object with
     55     // the specified R, G, B values.
     56 
     57     Color(IN BYTE r,
     58           IN BYTE g,
     59           IN BYTE b)
     60     {
     61         Argb = MakeARGB(255, r, g, b);
     62     }
     63 
     64     // Construct a Color object with
     65     // the specified A, R, G, B values.
     66     //
     67     // NOTE: R, G, B color values are not premultiplied.
     68 
     69     Color(IN BYTE a,
     70           IN BYTE r,
     71           IN BYTE g,
     72           IN BYTE b)
     73     {
     74         Argb = MakeARGB(a, r, g, b);
     75     }
     76 
     77     // Construct a Color object with
     78     // the specified ARGB values.
     79     //
     80     // NOTE: R, G, B color components are not premultiplied.
     81 
     82     Color(IN ARGB argb)
     83     {
     84         Argb = argb;
     85     }
     86 
     87     // Extract A, R, G, B components
     88 
     89     BYTE GetAlpha() const
     90     {
     91         return (BYTE) (Argb >> AlphaShift);
     92     }
     93 
     94     BYTE GetA() const
     95     {
     96         return GetAlpha();
     97     }
     98 
     99     BYTE GetRed() const
    100     {
    101         return (BYTE) (Argb >> RedShift);
    102     }
    103 
    104     BYTE GetR() const
    105     {
    106         return GetRed();
    107     }
    108 
    109     BYTE GetGreen() const
    110     {
    111         return (BYTE) (Argb >> GreenShift);
    112     }
    113 
    114     BYTE GetG() const
    115     {
    116         return GetGreen();
    117     }
    118 
    119     BYTE GetBlue() const
    120     {
    121         return (BYTE) (Argb >> BlueShift);
    122     }
    123 
    124     BYTE GetB() const
    125     {
    126         return GetBlue();
    127     }
    128 
    129     // Retrieve ARGB values
    130 
    131     ARGB GetValue() const
    132     {
    133         return Argb;
    134     }
    135 
    136     VOID SetValue(IN ARGB argb)
    137     {
    138         Argb = argb;
    139     }
    140 
    141     VOID SetFromCOLORREF(IN COLORREF rgb)
    142     {
    143         Argb = MakeARGB(255, GetRValue(rgb), GetGValue(rgb), GetBValue(rgb));
    144     }
    145 
    146     COLORREF ToCOLORREF() const
    147     {
    148         return RGB(GetRed(), GetGreen(), GetBlue());
    149     }
    150 
    151 public:
    152 
    153     // Standard color constants
    154     enum
    155     {
    156        Black = 0xff000000,
    157        Silver = 0xffc0c0c0,
    158        Gray = 0xff808080,
    159        White = 0xffffffff,
    160        Maroon = 0xff800000,
    161        Red = 0xffff0000,
    162        Purple = 0xff800080,
    163        Fuchsia = 0xffff00ff,
    164        Green = 0xff008000,
    165        Lime = 0xff00ff00,
    166        Olive = 0xff808000,
    167        Yellow = 0xffffff00,
    168        Navy = 0xff000080,
    169        Blue = 0xff0000ff,
    170        Teal = 0xff008080,
    171        Aqua = 0xff00ffff
    172     };
    173 
    174     // Shift count and bit mask for A, R, G, B components
    175     enum
    176     {
    177         AlphaShift  = 24,
    178         RedShift    = 16,
    179         GreenShift  = 8,
    180         BlueShift   = 0
    181     };
    182 
    183     enum
    184     {
    185         AlphaMask   = 0xff000000,
    186         RedMask     = 0x00ff0000,
    187         GreenMask   = 0x0000ff00,
    188         BlueMask    = 0x000000ff
    189     };
    190 
    191     // Assemble A, R, G, B values into a 32-bit integer
    192     static ARGB MakeARGB(IN BYTE a,
    193                          IN BYTE r,
    194                          IN BYTE g,
    195                          IN BYTE b)
    196     {
    197         return (((ARGB) (b) <<  BlueShift) |
    198                 ((ARGB) (g) << GreenShift) |
    199                 ((ARGB) (r) <<   RedShift) |
    200                 ((ARGB) (a) << AlphaShift));
    201     }
    202 
    203 protected:
    204 
    205     ARGB Argb;
    206 };
    207 
    208 #endif
    209 
    210